package com.shaokel;

import lombok.Getter;
import lombok.Setter;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.List;
import java.util.Random;

/**
 * 〈封装HotDog类〉
 * 〈少丶客〉
 *
 * @create 2020/9/17
 * @since 1.0.0
 */
@Getter
@Setter
public class HotDog {

    // 出生位置x
    private int x;
    // 出生位置 y
    private int y;
    // 热狗的图片
    private BufferedImage image;
    // 随机数
    private Random random = new Random();

    /**
     * 热狗随机出现的位置
     */
    public HotDog(){
        try {
            // 加载图片
            image = ImageIO.read(HotDog.class.getResource("/dog.png"));
            // 默认从顶部出现
            y = 0;
            // x横坐标随机出现
            x = random.nextInt(400)+30;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 热狗移动的方法
     */
    public void move(List<HotDog> list){
        // 纵坐标向下移动
        y += 10;
        // 判断y坐标值是否大于最大高度，如果大于，从list集合中移除当前热狗对象
        if(y >= 600){
            list.remove(this);
        }
    }

    /**
     * 吃热狗碰撞，消除数据
     * 返回消除的数量
     * @param wsc
     */
    public int clear(Wsc wsc,List<HotDog> list){
        // 开始判断
        // 获取到热狗的横坐标
        // 获取到热狗的左边顶点横坐标
        int dogx2 = x;
        // 获取到热狗的右边横坐标
        int dogx3 = dogx2+66;

        // 获取到热狗的纵坐标
        int dogy = y;
        // 获取到热狗图片的纵坐标加上热狗的长度
        int dogy2 = dogy+102;

        // 获取到王思聪的嘴
        int wscx = wsc.getX();
        int wscx2 = wscx+30;
        int wscx3 = wscx + 80;

        int wscy = wsc.getY();

        // 进行消除
        // int flagx2 = wscx2 - dogx2;
        int flagx2 = dogx2 - wscx2;//热狗的左顶点横坐标-wsc的左顶点的嘴坐标
        // int flagx3 = wscx3 - dogx3;
        int flagx3 = dogx3 - wscx3;//热狗的右顶点横坐标-wsc的右顶点的嘴坐标

        // int flagy = wscy - dogy2;
        int flagy = dogy2 - wscy;//热狗的长度-wsc的高度

        /**
         * flagx2和flagx3判断热狗是否对准wsc的嘴
         * flagy判断热狗是不是已经超过wsc的嘴
         */
        if(flagx2 > -20 && flagx3 < 20 && flagy > 20 && flagy < 40){
            boolean remove = list.remove(this);
            if(remove){
                return 1;
            }
        }
        return 0;
    }

}
